//status: 'inactive',暂停服务
//status: 'cancelled',注销
//status： 'active',正常
//status:''
const db = uniCloud.database()
const dbCmd = db.command
module.exports = {
	_before: function() { // 通用预处理器

	},
	// 云对象方法: register
	/**
	 * @param {Object} data
	 * @param {object} data = [location,avatar]坐标，及头像对象url,fileID
	 * @param {Array} data = [idCard]身份证正反面
	 * @param {string} data = [realName,phone]    
	 */

	async register(data) {
		const {
			userId
		} = data


		// 检查是否已注册
		const existing = await db.collection('linlier').where({
			userId
		}).get();
		if (existing.data.length > 0) {
			return {
				code: -1,
				message: '您已注册为服务专员'
			};
		}

		// 验证参数
		const {
			location,
			realName,
			phone,
			idCard,
			avatar
		} = data;
		if (!location || !realName || !phone || !idCard || !avatar) {
			return {
				code: -1,
				message: '请填写完整信息'
			};
		}

		// 插入数据
		const result = await db.collection('linlier').add({
			userId,
			serviceArea: {},
			status: 'pending',
			realName,
			location: new db.Geo.Point(location.longitude || location.lng, location.latitude || location
				.lat),
			idCard,
			phone,
			avatar,
			serviceTypes: [],
			introduction: data.introduction || '',
			rating: 0,
			evaluationCount: 0,
			evaluations: [],
			createTime: Date.now(),
			updateTime: Date.now()
		});

		return {
			code: 0,
			message: '注册成功',
			data: {
				specialistId: result.id
			}
		};
	},
	async editLinlier(data) {

		try {
			// 1. 校验传入参数是否包含 id
			if (!data || !data.id) {
				return {
					code: -1,
					message: '参数错误：缺少 id'
				};
			}
			if (data.location) {
				const {
					longitude,
					latitude
				} = data.location
				data.location = new db.Geo.Point(longitude, latitude)
			}
			// 2. 从 data 中剔除 id 字段（避免更新时传入主键）
			const {
				id,
				...updateData
			} = data;

			// 3. 执行更新操作（加 await 等待结果）
			const res = await db.collection('linlier').where({
					_id: id

				})
				.update({
					updateData
				});
			console.log("............", res);

			// 4. 根据更新结果判断是否成功（不同数据库 SDK 字段可能不同，需确认）
			// 常见字段：updated（更新的文档数）、modifiedCount（修改的字段数）
			if (res.updated > 0) {
				return {
					code: 0,
					message: '更新成功'
				};
			} else {
				return {
					code: -1,
					message: '更新失败：未找到对应文档或数据未变更'
				};
			}
		} catch (e) {
			// 5. 打印具体错误日志，便于排查
			console.error('编辑管家信息失败：', e);
			return {
				code: -1,
				message: '系统错误：更新管家信息失败'
			};

		}

	},

	async isLinlier(linlierId) {


	},
	async getPolygons(location) {
		// 云对象方法: hasSpecialistInArea

		const {
			longitude,
			latitude
		} = location;
		if (!location || !longitude || !latitude) {
			return {
				code: -1,
				message: '请传入有效的经纬度'
			};
		}
		const result = await db.collection('linlier')
			.where({
				status: 'pending',
				location: db.command.geoNear({
					geometry: new db.Geo.Point(longitude, latitude),
					maxDistance: 2000,
					minDistance: 0
				})
			})
			.field({
				serviceArea: 1,
				userId: 1,
				realName: 1,
				phone: 1,
				rating: 1
			})
			.get();
         console.log('........',result);
		return {
			code: 0,
			data: result.data
		}


	},
	/**
	 * @param {Object} linlierId
	 * @param {Object} status   'inactive',暂停服务 'cancelled', 'active',正常 pending
	 */

	async changStatus(linlierId, status) {

	},
	/**
	 * @param {Object} user 用户信息
	 * @param {Object} params 查询参数
	 * @param {string} [params.phone] 电话号码
	 * @param {string} [params.realName] 真实姓名
	 * @return {object} 包含状态码、数据和信息的对象
	 */
	async getLinliers(user, params) {
		// 1. 严格的权限校验
		// 建议将管理员手机号配置在环境变量中，而不是硬编码
		const ADMIN_PHONE = '13665087998';
		if (user.userTel !== ADMIN_PHONE) {
			return {
				code: -1,
				message: '权限不足：您不是管理员。'
			};
		}

		// 2. 构建查询条件
		let query = {};
		const {
			phone, // 从全局状态获取当前用户电话
			realName,
			status,
			pageSize,
			currentPage,
		} = params;

		if (phone) {
			// 按手机号精确查询
			query.phone = phone;
		}
		if (realName) {
			// 按姓名模糊查询
			query.realName = db.RegExp({
				regexp: realName,
				options: 'i', // 'i' 表示不区分大小写
			});
		}
		if (status) {
			query.status = status
		}

		try {
			// 3. 执行查询
			// 如果没有任何查询参数，则查询所有
			const res = await db.collection('linlier').where(query)
				.limit(pageSize)
				.skip(currentPage - 1)
				.get();

			if (res.data.length > 0) {
				return {
					code: 0,
					data: res.data,
					message: `查询成功，共找到 ${res.data.length} 条数据。`
				};
			} else {
				return {
					code: -1,
					message: "未查询到符合条件的数据。"
				};
			}

		} catch (e) {
			console.error("查询邻里管家数据失败：", e);
			// 4. 更友好的错误返回
			return {
				code: -1,
				message: "服务器错误，查询失败。"
			};
		}
	}


}